#ifndef FORMHOMEPAGE_H
#define FORMHOMEPAGE_H

#include <QListWidget>
#include <QListWidgetItem>
#include "FormBase64.h"
#include "FormPicRect.h"
#include "FormChatRoom.h"
#include "FormJSONView.h"
#include "DialogChatServer.h"
#include "components/CustomComponents.h"

class FormHomePage : public BaseFormWidget
{
    Q_OBJECT
public:
    FormHomePage(QWidget * parent = nullptr);

    virtual ~FormHomePage() {}

signals:
    // 创建新窗口信号
    void sendNewForm(uint);
    // 关闭所有标签页信号
    void sendCloseAll();

private slots:
    // 打开设置界面
    void slt_openSetting();
    // 关闭所有标签页
    void slt_closeAll();
    // 打开帮助界面
    void slt_help();
    // 打开通知界面
    void slt_chatServer();
    // 新建标签页
    void slt_newForm(int);
    // 切换首页图标展示方式
    void slt_appShow();
    // 列表模式下点击某一行
    void slt_itemClicked(QListWidgetItem *item);

private:
    // 从本地默认配置文件中读取帮助信息
    void initIconInfos();
    // 创建菜单栏
    void newFuncMenu();
    // 创建图标标签入口
    void newAppsForm();
    // 创建列表标签入口
    void newListForm();
    // 设置按钮风格
    MyPushButton* newFuncWithStyle(QString strTitle, uint iKey, const QString strTip, const QIcon &icon);
    // 添加功能按钮到列表中
    void newFunc2ListWidget(QListWidget* pListWidget, QString strTitle, uint iKey, const QIcon &icon);

private:
    QFrame*                         m_pFrameMain;       // 顶部菜单栏
    QPushButton*                    m_pChatServer;      // 服务端启用
    QPushButton*                    m_pAppShow;         // 首页图标展示方式
    bool                            m_bAppShowType;     // 首页图标展示状态

    QVBoxLayout*                    m_pAppLayout;       // 图标展示栅栏
    QWidget*                        m_pAppsForm;        // 图标展示
    QWidget*                        m_pListForm;        // 列表展示
    QMap<QListWidgetItem*, uint>    m_mapItem2Index;    // 根据返回的指针获取类型值
    QMap<uint, QString>             m_mapIndex2Info;    // 根据类型值获取帮助信息内容
};

#endif // FORMHOMEPAGE_H
